package top.guoziyang.mydb.backend.dm.page;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

import top.guoziyang.mydb.backend.dm.pageCache.PageCache;

/**
 *  实现一个缓存页面
 * */
public class PageImpl implements Page {
    private int pageNumber; // 页号,从 1 开始
    private byte[] data; //这个页实际包含的字节数据
    private boolean dirty; //这个页面是否是脏页面,在缓存驱逐的时候，脏页面需要被写回磁盘
    private Lock lock;
    
    private PageCache pc;// PageCache，用于缓存页面的管理

    public PageImpl(int pageNumber, byte[] data, PageCache pc) {
        this.pageNumber = pageNumber;//页面的编号
        this.data = data;//页面的字节数据。
        this.pc = pc;//页面缓存（PageCache）对象，用于管理缓存页。
        lock = new ReentrantLock();
    }

    public void lock() {
        lock.lock();
    }

    public void unlock() {
        lock.unlock();
    }

    public void release() {
        pc.release(this);
    }//将页面从缓存中释放

    public void setDirty(boolean dirty) {
        this.dirty = dirty;
    }

    public boolean isDirty() {
        return dirty;
    }

    public int getPageNumber() {
        return pageNumber;
    }//返回当前页面的页号

    public byte[] getData() {
        return data;
    }//返回当前页面的数据。

}
